今天的主題是前面章節Using libraries的延伸應用,我們將會使用Postman來解析HTML的內容。在開始之前,記得先把Day 26: Parse HTML response複製到自己的工作區。
回到自己的工作區後,打開今天的資料夾Parse HTML response
並根據以下步驟
新增請求
bing
GET
https://www.bing.com/search?q=postman
解析HTML
接下來需要找到所有搜尋結果的連結,收集起來儲存到一個陣列裡,所以先看一下內建函式庫cheerio的用法,也就是要用來解析HTML內容的函式庫,範例如下。可以看到只要用load
將HTML載入,就能透過$
搭配選擇器來取得相對應的元素進行操作
const cheerio = require('cheerio');
const $ = cheerio.load('<h2 class="title">Hello world</h2>');
$('h2.title').text('Hello there!');
$('h2').addClass('welcome');
$.html();
//=> <html><head></head><body><h2 class="title welcome">Hello there!</h2></body></html>
接著觀察一下剛剛搜尋引擎回傳的HTML資料格式,觀察要取回連結需要如何操作
<li class="b_algo b_vtl_deeplinks">
<h2><a href="https://www.postman.com/">Postman API Platform</a></h2>
...
<li class="b_algo">
<h2><a href="https://tw.alphacamp.co/blog/postman-api-tutorial-for-beginners">API測試工具 Postman 新手教學|使用Postman 開發出你的第一支 …</a></h2>
接著Tests
就能夠根據選擇器來把我們需要的所有連結取出,然後存放到陣列裡,最後把陣列轉成字串用collection變數進行保存
// 透過cheerio載入搜尋引擎傳回的HTML
const $ = cheerio.load(pm.response.text());
var links = [];
$("li.b_algo h2 a").each(function () {
let href = $(this).attr("href");
links.push(href)
});
//console.log(links)
pm.collectionVariables.set('links', JSON.stringify(links))
新增測試
簡單的加入兩個測項,分別基本測試200
成功狀態碼,而另一個測試用來確認變數links
的內容的確是一個陣列,由於前面我們轉成字串來儲存,這裡用JSON.parse
進行還原
pm.test("Status code is 200", function () {
pm.response.to.have.status(200);
});
pm.test("Body is correct", function () {
let links = JSON.parse(pm.collectionVariables.get("links"))
pm.expect(links).to.be.an("array");
});
submit
到這一步就已經完成了今天的挑戰內容,可以進行submit來確認是否通過。
今天的挑戰雖然也不難,但還是有一些知識點值得複習,像是
而若是結合之前章節學過的Monitor
、Workflows
、Pagination
,甚至還可以土炮出一個陽春的爬蟲小工具呢,不過我想應該是沒必要啦...
那麼今天就到這邊,我們明天見~